#include "board_init.h"
#include "hal_canfd.h"
#include <stdio.h>
#include <driverlib.h>

void main()
{

    board_init();

    // CANFD Test
    // 1. 配置结构体
    Hal_Canfd_Config_T canfd_cfg = {
            .base_addr = MCANA_DRIVER_BASE,
            .fd_enable = false,   // Classic CAN，不用FD
            .brs_enable = false,
            .nominal = {
                .prescaler = 0x3U,
                .tseg1 = 0x9U,
                .tseg2 = 0x8U,
                .sjw = 0x8U
            },
            .rx_id = 0x7E0         // 你的UDS物理寻址ID（需和发送端一致！）
            // 其它参数如有可自行补充
        };
        hal_canfd_init(&canfd_cfg);

        // 2. 发送数据
        uint8_t payload[8] = {1,2,3,4,5,6,7,8};
    // CANFD Test

        printf("Hello, SCI printf/puts stdio redirect!\r\n");
    while(1)
    {
        // CANFD TX Test
//        hal_canfd_transmit(0x15A5A5A5, payload, 8, true);
//        payload[0]++;
//        if(payload[0] == 0xFF){
//            payload[0] = 0;
//        }
        // CANFD TX Test


        // CANFD RX Test
        uint32_t rx_id;
        uint8_t  rx_data[64];
        uint8_t  rx_len;
        bool     is_ext;

        if (hal_canfd_receive(&rx_id, rx_data, &rx_len, &is_ext)) {
            // 收到新帧，可以进一步处理rx_data（如TP层/UDS层调度）
            printf("Received !\r\n");
        }
        // CANFD RX Test



        // STDIO Test
        //printf("Hello, SCI printf/puts stdio redirect!\r\n");
        // STDIO Test

        //SysCtl_delay(200000);
    }

    //
    // Stop Application.
    //
    asm("   ESTOP0");
}

